/*
 * Connection.h
 *
 *  Created on: 03/06/2011
 *      Author: dela
 */

#ifndef CONNECTION_H_
#define CONNECTION_H_

#include <string>
#include <gtkmm.h>
#include <list>
#include "Socket.h"
#include "Course.h"
#include "Class.h"

class Connection {
private:
	static Connection *conn;  //Instancia del singleton.

	char *ip;
	int port;
	Socket socket;
	char type;

	// Constructor privado por singleton:
	Connection(char *ip, int port) : ip(ip), port(port) {};
public:
	// Crea el Singleton.
	static void createSingleton(char *ip, int port){
		conn = new Connection(ip, port);
	};

	// Devuelve el singleton.
	static Connection *getInstance() {return conn;};

	// Inicializa la conexion:
	int initConnection();

	// Tipo:
	char getType() {return type;};
	void setType(char t) {type = t;};

	// Se loguea en el servidor: [Codigo de OP = 1]
	bool login( std::string user, std::string password );

	// Crea un Curso: [Codigo de OP = 2]
	bool createCourse( Course &c );

	// Devuelve lista de cursos [Codigo de OP = 3]
	void getCourses(std::list<Course> &courses);

	// Devuelve lista de cursos [Codigo de OP = 5]
	void getClasses(std::list<Class> &classes);

	// Crea una Clase:
	bool createClass( Class &c );
};

#endif /* CONNECTION_H_ */
